package niuke;
/**
 *
 * NC68 跳台阶
 * @描述
 * 一只青蛙一次可以跳上1级台阶，也可以跳上2级。求该青蛙跳上一个 n 级的台阶总共有多少种跳法（先后次序不同算不同的结果）。
 *
 * 数据范围：0≤n≤40
 * 要求：时间复杂度：O(n) ，空间复杂度： O(1)
 *
 * @示例1
 * 输入：
 * 2
 * 返回值：
 * 2
 * 说明：
 * 青蛙要跳上两级台阶有两种跳法，分别是：先跳一级，再跳一级或者直接跳两级。因此答案为2
 *
 * @示例2
 * 输入：
 * 7
 * 复制
 * 返回值：
 * 21
 *
 * @示例3
 * 输入：
 * 0
 * 复制
 * 返回值：
 * 0
 *
 * @解析
 * 对于本题,前提只有 一次 1阶或者2阶的跳法。
 *
 * a.如果两种跳法，1阶或者2阶，那么假定第一次跳的是一阶，那么剩下的是n-1个台阶，跳法是f(n-1);
 *
 * b.假定第一次跳的是2阶，那么剩下的是n-2个台阶，跳法是f(n-2)
 *
 * c.由a\b假设可以得出总跳法为: f(n) = f(n-1) + f(n-2)
 *
 * d.然后通过实际的情况可以得出：只有一阶的时候 f(1) = 1 ,只有两阶的时候可以有 f(2) = 2
 *
 * e.可以发现最终得出的是一个斐波那契数列：
 *
 *        | 1, (n=1)
 *
 * f(n) = | 2, (n=2)
 *
 *        | f(n-1)+f(n-2) ,(n>2,n为整数)
 * */
public class StepUp {
    public static void main(String[] args) {
        StepUp stepUp = new StepUp();
        System.out.println(stepUp.jumpFloor(5));
    }
    public int jumpFloor(int target) {
        if (target == 0){
            return 0;
        }
        if (target == 1){
            return 1;
        }
        if (target == 2){
            return 2;
        }
        return jumpFloor(target - 1) + jumpFloor(target - 2);
    }
}
